package com.fy56.platform.logistics.service.common;

import com.fy56.platform.logistics.common.ResultModel;

import java.util.List;

/**
 * Service基类
 */
public interface IBaseService<T> {

    /**
     * 获取单条数据
     *
     * @param id
     * @return
     */
    T selectByPrimaryKey(Long id);

    /**
     * 获取单条数据
     *
     * @param entity
     * @return
     */
    T get(T entity);

    /**
     * 插入数据
     *
     * @param entity
     * @return
     */
    ResultModel insert(T entity);

    /**
     * 按不为空的属性进行插入
     * 只插入不为null的字段,不会影响有默认值的字段
     * 优先使用传入的参数值,参数值空时,才会使用序列、UUID,自动增长
     *
     * @param entity
     * @return
     */
    ResultModel insertSelective(T entity);

    /**
     * 更新数据
     *
     * @param entity
     * @return
     */
    ResultModel update(T entity);

    /**
     * 据主键进行更新,这里最多只会更新一条数据
     * 只会更新不是null的数据
     *
     * @param entity
     * @return
     */
    ResultModel updateSelective(T entity);

    /**
     * 删除数据（一般为逻辑删除，更新del_flag字段为1）
     *
     * @param id
     * @return
     * @see int delete(T model)
     */
    ResultModel delete(Long id);

    /**
     * 删除数据（一般为逻辑删除，更新del_flag字段为1）
     *
     * @param entity
     * @return
     */
    ResultModel delete(T entity);

    /**
     * 查询数据列表
     *
     * @param t
     * @return
     */
    List<T> findList(T t);
}
